/**
 * Author(s): xuming.Wong <xuming.Wong@gmail.com>
 */

#ifndef __INPUT_CODE_H__
#define __INPUT_CODE_H__

namespace PQBuilder
{
	enum MouseButton
	{
		MOUSE_BUTTON_LEFT=0,
		MOUSE_BUTTON_RIGHT,
		MOUSE_BUTTON_MID,
		MOUSE_BUTTON_COUNT=MOUSE_BUTTON_MID-MOUSE_BUTTON_LEFT+1
	};

	//should translate to PQ3D key code
	enum KeyCode
	{
		KEY_CODE_UNKOWN=MOUSE_BUTTON_LEFT+MOUSE_BUTTON_COUNT,

		//insert new key here
		KEY_CODE_Delete,


		KEY_CODE_A,
		KEY_CODE_B,
		KEY_CODE_C,
		KEY_CODE_D,
		KEY_CODE_E,
		KEY_CODE_F,

		KEY_CODE_G,
		KEY_CODE_H,
		KEY_CODE_I,

		KEY_CODE_J,
		KEY_CODE_K,
		KEY_CODE_L,
		KEY_CODE_M,
		KEY_CODE_N,
		KEY_CODE_O,

		KEY_CODE_P,
		KEY_CODE_Q,
		KEY_CODE_R,

		KEY_CODE_S,


		KEY_CODE_T,
		KEY_CODE_U,
		KEY_CODE_V,
		KEY_CODE_W,
		KEY_CODE_X,
		KEY_CODE_Y,
		KEY_CODE_Z,

		KEY_CODE_0,
		KEY_CODE_1,
		KEY_CODE_2,
		KEY_CODE_3,
		KEY_CODE_4,
		KEY_CODE_5,
		KEY_CODE_6,
		KEY_CODE_7,
		KEY_CODE_8,
		KEY_CODE_9,

		KEY_CODE_CTRL,
		KEY_CODE_SHIFT,
		KEY_CODE_ALT,

		KEY_CODE_COUNT=KEY_CODE_ALT-KEY_CODE_UNKOWN+1
	};

	enum OpCategory
	{
		OP_CATEGORY_GENERAL,
		OP_CATEGORY_GAME_OBJECT,
		OP_CATEGORY_TERRAIN,
	};

	enum OpType
	{
		OP_NONE,

		//insert new command here.
		OP_DELETE,

		OP_PLAY,
		OP_PLAYING,

		OP_TERRAIN_EDIT_HEIGHT_MODE,//
		OP_TERRAIN_EDIT_HEIGHT,//

		OP_TERRAIN_BLEND_LAYER_MODE,//enter blend mode
		OP_TERRAIN_BLEND_LAYER,//

		OP_TERRAIN_EDIT_HIGHT,

		OP_MODE_SELECT,
		OP_MODE_TRANSLATE,//change tool mode to translate
		OP_MODE_ROTATE,
		OP_MODE_SCALE,

		OP_TRANSFROM_FREE_SELECTED,

		OP_TRANSFORM,//gizmo start transforming

		OP_TRANSLATE,//really translate
		OP_TRANSLATE_X,
		OP_TRANSLATE_Y,
		OP_TRANSLATE_Z,

		OP_ROTATE_X,
		OP_ROTATE_Y,
		OP_ROTATE_Z,

		OP_SCALE_X,
		OP_SCALE_Y,
		OP_SCALE_Z,

		//Terrain management
		OP_SELECT,

		//GameObject management
		OP_FRAME_OBJECT,

		//Terrain management
		OP_TERRAIN_START_EDIT,
		OP_TERRAIN_STOP_EDIT,
		OP_TERRAIN_BRUSH_MOVE,

		//Camera management
		OP_CAMERA_ROTATE,
		OP_CAMERA_ROTATE_OBJECT,//rotate around selected object
		OP_CAMERA_PAN,
		OP_SCALE_SCENE,

		OP_CAMERA_FORWARD,
		OP_CAMERA_BACKWARD,
		OP_CAMERA_LEFTWARD,
		OP_CAMERA_RIGHTWARD,

		OP_CAMERA_UPWARD,
		OP_CAMERA_DOWNWARD,


		//Add new operation just above this line.
		OP_COUNT=OP_SCALE_SCENE-OP_NONE+1
	};

}
#endif
